package 系统资源类

import (
	"gitee.com/go_888/internal-call/gopsutil/net"
	"log"
)

// X取当前网络连接信息 根据指定的网络协议获取系统中当前所有的网络连接信息。
// 协议 参数指定了要获取连接信息的网络协议类型，可填入tcp、udp、tcp4、udp4等等
// 返回一个X网络连接信息的切片，包含所有当前活动连接的详细信息。
func X取当前网络连接信息(协议 string) []X网络连接信息 {
	// 初始化一个空的X网络连接信息切片用于存储获取的连接信息。
	返回 := []X网络连接信息{}

	// 使用net.Connections函数根据指定的协议获取网络连接信息。
	// 注意：此处忽略了错误处理，实际使用中应考虑错误处理逻辑。
	n1, err := net.Connections(协议)
	if err != nil {
		log.Printf("取网络连接信息失败：%v", err)
	}
	// 遍历获取的网络连接信息列表。
	for _, v := range n1 {
		// 将当前连接信息转换并添加到返回的X网络连接信息切片中。
		返回 = append(返回, X网络连接信息{
			X文件描述符: v.Fd,
			X地址族:   v.Family,
			X连接类型:  v.Type,
			X本地地址:  X网络地址{IP: v.Laddr.IP, X端口: v.Laddr.Port},
			X远程地址:  X网络地址{IP: v.Raddr.IP, X端口: v.Raddr.Port},
			X连接状态:  v.Status, // 连接状态为 “LISTEN”，表示正在监听连接请求。
			X用户ID:  v.Uids,
			X进程ID:  v.Pid,
		})
	}
	// 返回填充了网络连接信息的切片。
	return 返回
}

// X取进程网络连接信息 根据指定的协议和进程ID获取网络连接信息。
// 参数:
// 协议 - 网络通信协议，，可填入tcp、udp、tcp4、udp4等等
// 进程id - 需要获取网络连接信息的进程ID。
// 返回值:
// []X网络连接信息 - 包含指定进程所有网络连接信息的切片。
func X取进程网络连接信息(协议 string, 进程id int) []X网络连接信息 {
	// 初始化一个空的X网络连接信息切片用于存储获取的连接信息。
	返回 := []X网络连接信息{}

	// 使用net.Connections函数根据指定的协议获取网络连接信息。
	// 注意：此处忽略了错误处理，实际使用中应考虑错误处理逻辑。
	n1, err := net.ConnectionsPid(协议, int32(进程id))
	if err != nil {
		log.Printf("取网络连接信息失败：%v", err)
	}
	// 遍历获取的网络连接信息列表。
	for _, v := range n1 {
		// 将当前连接信息转换并添加到返回的X网络连接信息切片中。
		返回 = append(返回, X网络连接信息{
			X文件描述符: v.Fd,
			X地址族:   v.Family,
			X连接类型:  v.Type,
			X本地地址:  X网络地址{IP: v.Laddr.IP, X端口: v.Laddr.Port},
			X远程地址:  X网络地址{IP: v.Raddr.IP, X端口: v.Raddr.Port},
			X连接状态:  v.Status, // 连接状态为 “LISTEN”，表示正在监听连接请求。
			X用户ID:  v.Uids,
			X进程ID:  v.Pid,
		})
	}
	// 返回填充了网络连接信息的切片。
	return 返回
}

type X网络连接信息 struct {
	X文件描述符 uint32  `json:"fd"`
	X地址族   uint32  `json:"family"`
	X连接类型  uint32  `json:"type"`
	X本地地址  X网络地址   `json:"localaddr"`
	X远程地址  X网络地址   `json:"remoteaddr"`
	X连接状态  string  `json:"status"` //连接状态为 “LISTEN”，表示正在监听连接请求。
	X用户ID  []int32 `json:"uids"`
	X进程ID  int32   `json:"pid"`
}

// Addr 实现了与psutil的兼容性
type X网络地址 struct {
	IP  string `json:"ip"`
	X端口 uint32 `json:"port"`
}
